/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package carreras.entidades;

import java.util.ArrayList;

/**
 *
 * @author fanky10
 */
public class CarrilesCarrera extends ArrayList<CarrilCarrera>{
    /**
     * devuelve el maximo carril
     * @return 
     */
    public int getMaxCarril(){
        //se podria ordenar desc y pedir el proximo
        int nro_carril = 1;//por default
        for(CarrilCarrera c: this){//busca el mayor
            if(c.getNro_carril()>=nro_carril){
                //si es mayor lo piso
                nro_carril=c.getNro_carril();
            }
        }
        return nro_carril;
    }

    public int getNextCarril() {
        //se podria ordenar desc y pedir el proximo
        int nro_carril = 1;//por default
        for(CarrilCarrera c: this){//busca el mayor
            if(c.getNro_carril()>=nro_carril){
                //si es mayor lo piso y le sumo uno
                nro_carril=c.getNro_carril()+1;
            }
        }
        return nro_carril;
    }

    public CarrilCarrera getCarrera(int nro_carril) {
        for(CarrilCarrera c: this){//busca el mayor
            if(c.getNro_carril()==nro_carril){
                //si es mayor lo piso
                return c;
            }
        }
        throw new IllegalArgumentException("Carrera no encontrada en carril nro: "+nro_carril);
    }

    public boolean isAllActualizado() {
        for(CarrilCarrera cc: this){
            if(!cc.isEsta_actualizado()){//si al menos uno no esta actualizado todo mal
                debug(cc.getAuto()+" no esta actualizada loco!");
                return false;
            }
        }
        //si no hay ninguno sin actualizar...
        return true;
    }
    /**
     * ahora se modifica y el ganador es aquel que tiene mejor tiempo y el tiempo del otro es mayor a cero
     * sino re piola, se rompe el auto... tiene tiempo cero y gana (WTF?!)
     * @return el carrilCarrera con mejor tiempo 
     */
    public CarrilCarrera getWinner() {
        CarrilCarrera reto = null;
        if(this.isEmpty()){
            throw new IllegalArgumentException("que oonda! no hay nadie para quien buscar :P");
        }
        if(this.size()==1){
            return this.get(0);
        }
        for(CarrilCarrera cc: this){
            for(CarrilCarrera cci: this){
                if(cc.getTiempos().getTiempoDecisorio().getTiempo()>0 && cc.getTiempos().getTiempoDecisorio().getTiempo()<cci.getTiempos().getTiempoDecisorio().getTiempo()){
                    reto = cc;
                }
            }
        }
        if(reto==null){
            for(CarrilCarrera cc: this){
                for(CarrilCarrera cci: this){
                    if(cc.getTiempos().getTiempoDecisorio().getTiempo()>cci.getTiempos().getTiempoDecisorio().getTiempo() && cci.getTiempos().getTiempoDecisorio().getTiempo()>0){
                        reto = cc;
                    }
                }
            }
        }
        if(reto==null){
            throw new IllegalArgumentException("que oonda! al final no encontre a nadie!");
        }
        return reto;
    }
    private static final boolean DEBUG = true;
    private static void debug(String message){
        if(DEBUG){
            System.out.println("DEBUG - "+CarrilesCarrera.class.getName()+" - "+message);
        }
    }
}
